package com.wzq.controller;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.wzq.dao.dto.SpaceDto;
import com.wzq.dao.pojo.Code;
import com.wzq.dao.pojo.Favorites;
import com.wzq.dao.pojo.Result;
import com.wzq.dao.pojo.Space;
import com.wzq.service.ISpaceService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author yzc
 * @since 2022-08-31
 */
@RestController
    @RequestMapping("/space")
public class SpaceController {

    @Autowired
    private ISpaceService iSpaceService;
    //   添加
    @PostMapping
    public Result save(@RequestBody Space space) {
        LambdaQueryWrapper<Space> lambdaQueryWrapper = new LambdaQueryWrapper<>();
        lambdaQueryWrapper.eq(Space::getW_id,space.getW_id());
        lambdaQueryWrapper.eq(Space::getSpace_name,space.getSpace_name());
        lambdaQueryWrapper.last("limit 1");
        Space SelectSpaceName = iSpaceService.getOne(lambdaQueryWrapper);
        if (SelectSpaceName != null){
            return new Result(Code.SAVE_ERR,false);
        }else{
            iSpaceService.save(space);
            return new Result(Code.SAVE_OK,true);
        }
    }

    //    根据用户ID获取该用户下的所有空间（p_id为空时 我的页面展示作用）
//    是否收藏
    @PostMapping("/{w_id}/getfavorites/{p_id}")
    public Result getfavorites(@PathVariable Integer w_id, @PathVariable Integer p_id) {
        List<Space> spaces =new ArrayList<>();
        //查询该用户的所有实验室
        List<Space> list = iSpaceService.getSpaceByUserIdNoPid(w_id);
        //查询实验室中是否存在该项目
        for ( Space s : list ) {
            s.setP_id(p_id);
            LambdaQueryWrapper<Space> lqw = new LambdaQueryWrapper<>();
            lqw.eq(Space::getW_id,w_id).eq(Space::getSpace_name,s.getSpace_name());
            lqw.eq(Space::getP_id,p_id);        //.eq(Space::getIsfavorites,1)
            // 存在赋值1，不存在赋值0
            if ( iSpaceService.count(lqw)>0)   s.setIsfavorites(1);
            else        s.setIsfavorites(0);
            // 添加到集合中
            spaces.add(s);
        }
        return new Result(Code.GET_OK,spaces);
    }

//    //    是否收藏
//    @GetMapping("/getfavoriteslike")
//    public Result getfavoriteslikeByspaceName(@RequestParam("w_id") Integer w_id,
//                                   @RequestParam("p_id") Integer p_id,
//                                   @RequestParam("spaceName") String spaceName) {
//        List<Space> spaces =new ArrayList<>();
//        //查询该用户的所有实验室
//        List<Space> list = iSpaceService.getSpaceByUserIdNoPid(w_id);
//        //查询实验室中是否存在该项目
//        for ( Space s : list ) {
//            s.setP_id(p_id);
//            LambdaQueryWrapper<Space> lqw = new LambdaQueryWrapper<>();
//            lqw.eq(Space::getW_id,w_id).eq(Space::getSpace_name,s.getSpace_name());
//            lqw.eq(Space::getP_id,p_id).like(Space::getSpace_name,spaceName);        //.eq(Space::getIsfavorites,1)
//            // 存在赋值1，不存在赋值0
//            if ( iSpaceService.count(lqw)>0)   s.setIsfavorites(1);
//            else        s.setIsfavorites(0);
//            // 添加到集合中
//            spaces.add(s);
//        }
//        return new Result(Code.GET_OK,spaces);
//    }

    //    id删除
    @GetMapping("/{w_id}/delete/{p_id}")
    public Result deleteById(@PathVariable Integer w_id,@PathVariable Integer p_id,@RequestParam String spacename) {
        LambdaQueryWrapper<Space> lqw = new LambdaQueryWrapper<>();
        lqw.eq(Space::getW_id,w_id).eq(Space::getP_id,p_id).eq(Space::getSpace_name,spacename);
        boolean flag = iSpaceService.remove(lqw);
        return new Result(flag ? Code.DELETE_OK:Code.DELETE_ERR,flag);
    }

    //添加空间内的项目
    @PostMapping("spaceProject")
    public Result spaceProject(@RequestBody Space space){
       Boolean flag = iSpaceService.save(space);
        return new Result(flag ? Code.UPDATE_OK:Code.UPDATE_ERR,flag);
    }
    //   修改
    @PutMapping
    public Result update(@RequestBody Space space) {
        boolean flag = iSpaceService.updateById(space);
        return new Result(flag ? Code.UPDATE_OK:Code.UPDATE_ERR,flag);
    }

    //    id删除
    @DeleteMapping("/{id}")
    public Result deleteById(@PathVariable Integer id) {
        boolean flag = iSpaceService.removeById(id);
        return new Result(flag ? Code.DELETE_OK:Code.DELETE_ERR,flag);
    }

    //   按用户id 空间名字 删除空间
    @GetMapping("/deleteSpaceByIdAndSpaceName")
    public Result deleteById(@RequestParam("w_id") String w_id,@RequestParam("spacename") String spacename) {
        int i =  iSpaceService.deleteSpaceByIdAndSpaceName(w_id,spacename);
        if (i!=0){
            return new Result(Code.DELETE_OK,"删除成功");
        }else{
            return new Result(Code.DELETE_ERR,"删除失败");

        }

    }
    //    根据 实验室名称 模糊查询
    @GetMapping("/like")
    public Result like(@RequestParam("spaceName") String spaceName,@RequestParam("w_id") Integer w_id,@RequestParam("p_id") Integer p_id) {
        QueryWrapper<Space> qw = new QueryWrapper<>();
        qw.like("space_name",spaceName).eq("w_id",w_id).isNull("p_id");
        List<Space> list = iSpaceService.list(qw);
        ArrayList<Space> spaces = new ArrayList<>();
        LambdaQueryWrapper<Space> lqw = new LambdaQueryWrapper<>();
        for (Space space : list) {
            lqw.clear();
            lqw.eq(Space::getSpace_name,space.getSpace_name()).eq(Space::getW_id,space.getW_id()).eq(Space::getP_id,p_id);
            if ( iSpaceService.count(lqw)>0){
                space.setIsfavorites(1);
            }
            spaces.add(space);
        }
        return new Result(Code.GET_OK,spaces);
    }
    //    根据用户ID获取该用户下的所有空间
    @PostMapping("/getSpaceByUserId")
    public Result getSpaceByUserId(@RequestBody SpaceDto spaceDto) {
        List<Space> list = iSpaceService.getSpaceByUserId(spaceDto.getW_id());
        Map<String , Object> map = new HashMap<>();
        map.put("data",list);
        return new Result(Code.GET_OK,map);
    }

    //    根据用户ID获取该用户下的所有空间（p_id为空时 我的页面展示作用）
    //    是否收藏
    @PostMapping("/getSpaceByUserIdNoPid")
    public Result getSpaceByUserIdNoPid(@RequestBody SpaceDto spaceDto) {
        List<Space> list = iSpaceService.getSpaceByUserIdNoPid(spaceDto.getW_id());
        Map<String , Object> map = new HashMap<>();
        map.put("data",list);
        return new Result(Code.GET_OK,map);
    }

    //    获得id对应用户信息
    @GetMapping("/{id}")
    public Result getById(@PathVariable Integer id) {
        Space space = iSpaceService.getById(id);
        Integer code = space != null ? Code.GET_OK : Code.GET_ERR;
        String msg = space != null ? "" : "数据查询失败，请重试！";
        return new Result(code,space,msg);
    }

    //     获得所有用户信息
    @GetMapping
    public Result getAll() {
        List<Space> list = iSpaceService.list();
        System.out.println(list);
        Integer code = list != null ? Code.GET_OK : Code.GET_ERR;
        String msg = list != null ? "" : "数据查询失败，请重试！";
        return new Result(code,list,msg);
    }

}
